home *** CD-ROM | disk | FTP | other *** search
/ Creative Computers / Creative Computers CD-ROM, Volume 1 (Legendary Design Technologies, Inc.)(1994).iso / shareware / telecom / term_4.1 / extras / hydracom / hydracom-source.lha / hydracom.h < prev    next >
C/C++ Source or Header  |  1994-07-02  |  8KB  |  276 lines

  1. /*=============================================================================
  2.  
  3.                               HydraCom Version 1.00
  4.  
  5.                          A sample implementation of the
  6.                    HYDRA Bi-Directional File Transfer Protocol
  7.  
  8.                              HydraCom was written by
  9.                    Arjen G. Lentz, LENTZ SOFTWARE-DEVELOPMENT
  10.                   COPYRIGHT (C) 1991-1993; ALL RIGHTS RESERVED
  11.  
  12.                        The HYDRA protocol was designed by
  13.                  Arjen G. Lentz, LENTZ SOFTWARE-DEVELOPMENT and
  14.                              Joaquim H. Homrighausen
  15.                   COPYRIGHT (C) 1991-1993; ALL RIGHTS RESERVED
  16.  
  17.  
  18.   Revision history:
  19.   06 Sep 1991 - (AGL) First tryout
  20.   .. ... .... - Internal development
  21.   11 Jan 1993 - HydraCom version 1.00, Hydra revision 001 (01 Dec 1992)
  22.  
  23.  
  24.   For complete details of the Hydra and HydraCom licensing restrictions,
  25.   please refer to the license agreements which are published in their entirety
  26.   in HYDRACOM.C and LICENSE.DOC, and also contained in the documentation file
  27.   HYDRACOM.DOC
  28.  
  29.   Use of this file is subject to the restrictions contained in the Hydra and
  30.   HydraCom licensing agreements. If you do not find the text of this agreement
  31.   in any of the aforementioned files, or if you do not have these files, you
  32.   should immediately contact LENTZ SOFTWARE-DEVELOPMENT and/or Joaquim
  33.   Homrighausen at one of the addresses listed below. In no event should you
  34.   proceed to use this file without having accepted the terms of the Hydra and
  35.   HydraCom licensing agreements, or such other agreement as you are able to
  36.   reach with LENTZ SOFTWARE-DEVELOMENT and Joaquim Homrighausen.
  37.  
  38.  
  39.   Hydra protocol design and HydraCom driver:         Hydra protocol design:
  40.   Arjen G. Lentz                                     Joaquim H. Homrighausen
  41.   LENTZ SOFTWARE-DEVELOPMENT                         389, route d'Arlon
  42.   Langegracht 7B                                     L-8011 Strassen
  43.   3811 BT  Amersfoort                                Luxembourg
  44.   The Netherlands
  45.   FidoNet 2:283/512, AINEX-BBS +31-33-633916         FidoNet 2:270/17
  46.   arjen_lentz@f512.n283.z2.fidonet.org               joho@ae.lu
  47.  
  48.   Please feel free to contact us at any time to share your comments about our
  49.   software and/or licensing policies.
  50.  
  51. =============================================================================*/
  52.  
  53. #ifndef WIN_AGL
  54. #define WIN_AGL 0        /* set to 1 for AGL's MS-DOS/AtariST window package */
  55. #endif
  56.  
  57. #include <stdio.h>
  58. #include <stdlib.h>
  59. #include <stdarg.h>
  60. #include <string.h>
  61. #include <ctype.h>
  62. #ifdef AMIGA
  63. #define byte foo234234
  64. #include <dos.h>
  65. #undef byte
  66. #else
  67. #include <dos.h>
  68. #endif    /* AMIGA */
  69. #include <time.h>
  70. #include <sys/stat.h>
  71. /*#include <process.h>*/    /* OLSEN */
  72. /*#include <signal.h>*/        /* OLSEN */
  73. #if WIN_AGL
  74. #include "window.h"     /* AGL's window library */
  75. #endif
  76. #ifdef AMIGA
  77. #include <fcntl.h>        /* OLSEN */
  78. #else
  79. #include <conio.h>      /* MS-DOS Turbo/Borland C(++) console stuff */
  80. #endif
  81. #include "2types.h"
  82. #include "hydra.h"
  83.  
  84. #ifdef __MSDOS__
  85. #define inteli(x) (x)
  86. #define intell(x) (x)
  87. #endif
  88. #if !WIN_AGL
  89. #define Esc   0x01b
  90. #define Alt_B 0x130
  91. #define Alt_C 0x12e
  92. #define Alt_E 0x112
  93. #define Alt_H 0x123
  94. #define Alt_X 0x12D
  95. #define PgUp  0x149
  96. #define PgDn  0x151
  97. #endif
  98.  
  99. #ifdef AMIGA
  100. #include "amiga.h"
  101. #define intell(x) (((x & 0x000000FF) << 24) | ((x & 0x0000FF00) << 8) | ((x & 0x00FF0000) >> 8) | ((x & 0xFF000000) >> 24))
  102. #endif    /* AMIGA */
  103.  
  104. #define PRGNAME "HydraCom"
  105. #define LOGID   "HCom"
  106. #define VERSION "1.00"
  107. #ifdef __MSDOS__
  108. #  define HC_OS  "PC"
  109. #else /*!MSDOS*/
  110. #  ifdef __OS2__
  111. #    define HC_OS  "OS/2"
  112. #  else /*!OS2*/
  113. #    ifdef __TOS__
  114. #      define HC_OS  "ST"
  115. #    endif /*TOS*/
  116. #  endif /*OS2*/
  117. #endif /*MSDOS*/
  118.  
  119. #ifdef AMIGA
  120. #define HC_OS "AMIGA"
  121. #endif    /* AMIGA */
  122.  
  123.  
  124. #ifdef AMIGA        /* OLSEN */
  125. #define PATHLEN 256
  126. #else
  127. #define PATHLEN 90
  128. #endif    /* AMIGA */
  129. #define MAXARGS 50
  130.  
  131. #define DENY_ALL   0x0000
  132. #define DENY_RDWR  0x0010
  133. #define DENY_WRITE 0x0020
  134. #define DENY_READ  0x0030
  135. #define DENY_NONE  0x0040
  136.  
  137. #ifdef MAIN
  138. #define global
  139. #else
  140. #define global extern
  141. #endif
  142.  
  143. global  char     ourname[PATHLEN];
  144. global  char     work[256],
  145.                  buffer[256];
  146. global  char     device[256];    /* OLSEN */
  147. global  int      port;
  148. global  word     cur_speed;
  149. global  word     com_speed;
  150. global  boolean  parity;
  151. global  boolean  noinit;
  152. global  boolean  nocarrier;
  153. global  boolean  dropdtr;
  154. global  int      flowflags;
  155. global  int      dcdmask;
  156. global  boolean  nobell;
  157. global  boolean  mailer;
  158. global  boolean  nooriginator;
  159. global  boolean  hdxsession;
  160. global  long     hydra_txwindow,
  161.                  hydra_rxwindow;
  162. global  char    **av;
  163. global  int      loglevel;
  164. global  FILE    *logfp;
  165. global  char    *result;
  166. global  char    *download;
  167. #ifdef AMIGA
  168. global  char     single_file[32];
  169. #else
  170. global  char     single_file[20];
  171. #endif    /* AMIGA */
  172. global  boolean  single_done;
  173. global  boolean  noresume;
  174. global  boolean  nostamp;
  175. global  dword    hydra_options;
  176. global  int      opustask;
  177. global  char    *opuslog;
  178. global  boolean  didsome;
  179. #if WIN_AGL
  180. global  WIN_IDX  file_win,
  181.                  log_win,
  182.                  remote_win,
  183.                  local_win;
  184. global  boolean  log_first;
  185. #else
  186. global  void    *term_scr;
  187. global  int      term_x,   term_y,
  188.                  file_x,   file_y,
  189.                            log_y,
  190.                  remote_x, remote_y,
  191.                  local_x,  local_y;
  192. #endif
  193.  
  194. #define CHAT_TIMEOUT 60
  195. global  word     chatfill;
  196. global  long     chattimer,
  197.                  lasttimer;
  198.  
  199.  
  200. #ifdef __PROTO__
  201. # define        PROTO(s) s
  202. #else
  203. # define        PROTO(s) ()
  204. #endif
  205.  
  206.  
  207. /* hydracom.c */
  208. void endprog     PROTO((int errcode ));
  209. int  config      PROTO((int argc , char *argv []));
  210. void init        PROTO((void ));
  211. int  batch_hydra PROTO((char *filespec, char *alias ));
  212. void hydracom    PROTO((void ));
  213.  
  214. /* fmisc.c */
  215. void     unique_name PROTO((char *pathname ));
  216. char    *xfer_init   PROTO((char *fname , long fsize , long ftime ));
  217. boolean  xfer_bad    PROTO((void ));
  218. char    *xfer_okay   PROTO((void ));
  219. void    xfer_del     PROTO((void ));
  220.  
  221. /* misc.c */
  222. int   keyabort     PROTO((void ));
  223. void  rem_chat     PROTO((byte *data, word len ));
  224. int   parse        PROTO((char *string ));
  225. void  splitpath    PROTO((char *filepath , char *path , char *file ));
  226. void  mergepath    PROTO((char *filepath , char *path , char *file ));
  227. int   fexist       PROTO((char *filename ));
  228. void  any_key      PROTO((void ));
  229. int   get_key      PROTO((void ));
  230. int   get_str      PROTO((char *prompt , char *s , int maxlen ));
  231. void  resultlog    PROTO((boolean xmit , char *fname , long bytes , long xfertime ));
  232. char *h_revdate    PROTO((long revstamp ));
  233. void  message      PROTO((int level , char *fmt , ...));
  234. void  cprint       PROTO((char *fmt , ...));
  235. void  hydra_gotoxy PROTO((int x, int y ));
  236. void  hydra_printf PROTO((char *fmt, ...));
  237. void  hydra_clreol PROTO((void ));
  238.  
  239. /* dos_file.c */
  240. void  dos_sharecheck PROTO((void ));
  241. int   dos_open       PROTO((char *pathname , byte create ));
  242. int   dos_sopen      PROTO((char *pathname , byte create ));
  243. int   dos_sappend    PROTO((char *pathname , byte create ));
  244. int   dos_close      PROTO((int handle ));
  245. int   dos_lock       PROTO((int handle , long offset , long len ));
  246. int   dos_unlock     PROTO((int handle , long offset , long len ));
  247. long  dos_seek       PROTO((int handle , long offset , int fromwhere ));
  248. long  dos_tell       PROTO((int handle ));
  249. int   dos_read       PROTO((int handle , void *buf , word len ));
  250. int   dos_write      PROTO((int handle , void *buf , word len ));
  251. FILE *sfopen         PROTO((char *name, char *mode, int shareflag));
  252.  
  253. /* syspc.c */
  254. void  dtr_out      PROTO((byte flag ));
  255. void  com_flow     PROTO((byte flags ));
  256. void  com_setspeed PROTO((word speed ));
  257. void  com_putblock PROTO((byte *s , word len ));
  258. void  sys_init     PROTO((void ));
  259. void  sys_reset    PROTO((void ));
  260. void  sys_idle     PROTO((void ));
  261. int   com_outfull  PROTO((void ));
  262. int   carrier      PROTO((void ));
  263. void  com_flush    PROTO((void ));
  264. void  com_putbyte  PROTO((byte c ));
  265. void  com_purge    PROTO((void ));
  266. void  com_dump     PROTO((voi